#ifndef GEO_SURFACE_CUTTER_H
#define GEO_SURFACE_CUTTER_H

#include "GeoCuttableSurface.h"

namespace H3D
{
	class GeoSurfaceCutter
	{
	public:
		GeoSurfaceCutter(){};
		virtual ~GeoSurfaceCutter(){};
		virtual bool Cut(GeoCuttableSurface::ShapeDatabase & db, vector<Vec3f> & coords, GeoCuttableSurface::ShapeDatabase::Point ** pts, int numPts) = 0;
	protected:
		Vec3f GetNormal(GeoCuttableSurface::ShapeDatabase::Point * pt);
		Vec3f GetNormal(GeoCuttableSurface::ShapeDatabase::Face * fc);
	};

	class SpringCutter: public GeoSurfaceCutter
	{
	public:
		SpringCutter();
		virtual ~SpringCutter();
		virtual bool Cut(GeoCuttableSurface::ShapeDatabase & db, vector<Vec3f> & coords, GeoCuttableSurface::ShapeDatabase::Point ** pts, int numPts);
	};

	class DeletionCutter: public GeoSurfaceCutter
	{
	public:
		DeletionCutter();
		virtual ~DeletionCutter();
		virtual bool Cut(GeoCuttableSurface::ShapeDatabase & db, vector<Vec3f> & coords, GeoCuttableSurface::ShapeDatabase::Point ** pts, int numPts);
	};
}

#endif